#ifndef __FIFO_TO_AMM_REGS_H__
#define __FIFO_TO_AMM_REGS_H__

#include <io.h>


#define FIFO_TO_AMM_BLOCKSIZE_LOG2			10

//! @defgroup FIFO_TO_AMM_REGS Регистры управления и статуса
//! @brief Адресное пространство модуля
//! @{
    //! @name Control and status registers (CSR)
    //! @{
#define FIFO_TO_AMM_STATUS_REG          0       //!< @sa @ref FIFO_TO_AMM_STATUS_REG
#define FIFO_TO_AMM_CTRL_REG            1       //!< @sa @ref FIFO_TO_AMM_CTRL_REG
#define FIFO_TO_AMM_FRAMECNT_REG        2
#define FIFO_TO_AMM_BLOCKCNT_REG       3
#define FIFO_TO_AMM_FBLOCKOFST_REG      4       //!< @sa @ref FIFO_TO_AMM_FBLOCKOFST_REG
#define FIFO_TO_AMM_FRAMEOFST_REG       5       //!< @sa @ref FIFO_TO_AMM_FRAMEOFST_REG
    //! @}

    //! @defgroup FIFO_TO_AMM_STATUS_REG Регистр статуса 
    //! @brief Содержит флаги состояния модуля
    //! @{
        //! @name Функции доступа к регистру статуса
        //! @{
        #define IOADDR_FIFO_TO_AMM_STATUS(base) \
            __IO_CALC_ADDRESS_NATIVE(base, FIFO_TO_AMM_STATUS_REG)
        #define IORD_FIFO_TO_AMM_STATUS(base) \
            IORD(base, FIFO_TO_AMM_STATUS_REG) 
        //! @}

        //! @name Битовые обращения к регистру статуса
        //! @{
        #define FIFO_TO_AMM_STATUS_EMPTY_MSK                  0x00000001
        #define FIFO_TO_AMM_STATUS_EMPTY_OFST                 0
        #define FIFO_TO_AMM_STATUS_FULL_MSK                   0x00000002
        #define FIFO_TO_AMM_STATUS_FULL_OFST                  1
        //! @}
    //! @}

    //! @defgroup FIFO_TO_AMM_CTRL_REG Регистр управления
    //! @brief Предназначен для управления модулем
    //! @{
        //! @name Функции доступа к регистру управления
        //! @{
        #define IOADDR_FIFO_TO_AMM_CTRL(base) \
            __IO_CALC_ADDRESS_NATIVE(base, FIFO_TO_AMM_CTRL_REG)
        #define IORD_FIFO_TO_AMM_CTRL(base) \
            IORD(base, FIFO_TO_AMM_CTRL_REG) 
        #define IOWR_FIFO_TO_AMM_CTRL(base, data) \
            IOWR(base, FIFO_TO_AMM_CTRL_REG, data)
        //! @}

        //! @name Битовые обращения к регистру управления
        //! @{
        #define FIFO_TO_AMM_CTRL_CMD_MSK                     0x0000000F
        #define FIFO_TO_AMM_CTRL_CMD_OFST                    0
        //! @}        
    //! @}

    //! @defgroup FIFO_TO_AMM_FRAMECNT_REG Регистр счетчика кадров
    //! @brief Указывает к какому кадру относится пакет
    //! @{
        //! @name Функции доступа к регистру счетчика кадров
        //! @{
        #define IOADDR_FIFO_TO_AMM_FRAMECNT(base) \
            __IO_CALC_ADDRESS_NATIVE(base, FIFO_TO_AMM_FRAMECNT_REG)
        #define IORD_FIFO_TO_AMM_FRAMECNT(base) \
            IORD(base, FIFO_TO_AMM_FRAMECNT_REG) 
        //! @}

        //! @name Битовые обращения к регистру счетчика кадров
        //! @{
        #define FIFO_TO_AMM_FRAMECNT_MSK                  0x0000FFFF
        #define FIFO_TO_AMM_FRAMECNT_OFST                 0
        //! @}        
    //! @}
    
    //! @defgroup FIFO_TO_AMM_BLOCKCNT_REG Регистр номера текущего блока данных
    //! @brief Передает номера текущего блока, из которого следует читать данные пакета
    //! @{
        //! @name Функции доступа к регистру номера текущего блока данных
        //! @{
        #define IOADDR_FIFO_TO_AMM_BLOCKCNT(base) \
            __IO_CALC_ADDRESS_NATIVE(base, FIFO_TO_AMM_BLOCKCNT_REG)
        #define IORD_FIFO_TO_AMM_BLOCKCNT(base) \
            IORD(base, FIFO_TO_AMM_BLOCKCNT_REG) 
        //! @}

        //! @name Битовые обращения к регистру номера текущего блока данных
        //! @{
        #define FIFO_TO_AMM_BLOCKCNT_MSK                  0xFFFFFFFF
        #define FIFO_TO_AMM_BLOCKCNT_OFST                 0
        //! @}        
    //! @}
    
    //! @defgroup FIFO_TO_AMM_FBLOCKOFST_REG Регистр смещения до первого блока данных
    //! @brief Содержит смещение до первого блока, в который следует писать данные пакета
    //! @{
        //! @name Функции доступа к регистру смещения до первого блока данных
        //! @{
        #define IOADDR_FIFO_TO_AMM_FBLOCKOFST(base) \
            __IO_CALC_ADDRESS_NATIVE(base, FIFO_TO_AMM_FBLOCKOFST_REG)
        #define IORD_FIFO_TO_AMM_FBLOCKOFST(base) \
            IORD(base, FIFO_TO_AMM_FBLOCKOFST_REG) 
        #define IOWR_FIFO_TO_AMM_FBLOCKOFST(base, data) \
            IOWR(base, FIFO_TO_AMM_FBLOCKOFST_REG, data)
        //! @}

        //! @name Битовые обращения к регистру смещения до первого блока данных
        //! @{
        #define FIFO_TO_AMM_FBLOCKOFST_MSK                  0xFFFFFFFF
        #define FIFO_TO_AMM_FBLOCKOFST_OFST                 0
        //! @}        
    //! @}
    
    //! @defgroup FIFO_TO_AMM_FRAMEOFST_REG Регистр смещения внутри блока
    //! @brief Содержит смещение по данных внутри блока
    //! @{
        //! @name Функции доступа к регистру смещения внутри блока
        //! @{
        #define IOADDR_FIFO_TO_AMM_FRAMEOFST(base) \
            __IO_CALC_ADDRESS_NATIVE(base, FIFO_TO_AMM_FRAMEOFST_REG)
        #define IORD_FIFO_TO_AMM_FRAMEOFST(base) \
            IORD(base, FIFO_TO_AMM_FRAMEOFST_REG) 
        #define IOWR_FIFO_TO_AMM_FRAMEOFST(base, data) \
            IOWR(base, FIFO_TO_AMM_FRAMEOFST_REG, data)
        //! @}

        //! @name Битовые обращения к регистру смещения внутри блока
        //! @{
        #define FIFO_TO_AMM_FRAMEOFST_MSK                  0xFFFFFFFF
        #define FIFO_TO_AMM_FRAMEOFST_OFST                 0
        //! @}        
    //! @}
//! @}

//! @}
#endif /* __FIFO_TO_AMM_REGS_H__ */
